import Joi from 'joi';

// 用户ID验证 (共用)
const userIdSchema = Joi.alternatives()
  .try(
    Joi.number().integer().positive(),
    Joi.string().pattern(/^\d+$/).message("ID必须是数字字符串")
  )
  .required()
  .messages({
    'alternatives.types': 'ID必须是数字或数字字符串',
    'alternatives.match': '无效的ID格式'
  });

// 用户查询参数验证
export const getUserListSchema = Joi.object({
  page: Joi.number().integer().min(1).default(1),
  limit: Joi.number().integer().min(1).max(100).default(10), 
  username: Joi.string().trim().allow('', null).optional(),
  search: Joi.string().trim().max(50).allow('',null).optional(),
   createTime: Joi.date().iso().allow('', null).optional(),
  status: Joi.string().valid('active', 'inactive', 'suspended').allow('', null).optional(),
  role: Joi.string().valid('user', 'admin', 'editor').allow('', null).optional(),
  sortBy: Joi.string().valid('createdAt', 'lastLogin', 'username').allow('', null).optional(),
  order: Joi.string().valid('asc', 'desc').default('desc').optional()
});

// 批量删除用户验证
export const batchDeleteUsersSchema = Joi.object({
  ids: Joi.array().items(userIdSchema).min(1).required().messages({
    'array.base': 'ID列表必须是一个数组',
    'array.min': '至少需要提供一个ID'
  })
}).options({ convert: true }); // 关键配置

// 用户创建验证
export const createUserSchema = Joi.object({
  username: Joi.string().min(3).max(30).required(),
  email: Joi.string().email().required().allow('', null).optional(),
  password: Joi.string().min(8).pattern(new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])'))
    .message('密码必须包含大小写字母和数字'),
  role: Joi.string().valid('user', 'admin', 'editor').default('user'),
  phone: Joi.string().pattern(/^1[3456789]\d{9}$/).allow('', null).optional(),
  status: Joi.string().valid('active', 'inactive').default('active')
});

// 用户更新验证
export const updateUserSchema = Joi.object({
  username: Joi.string().min(2).max(30),
  email: Joi.string().email().allow('', null).optional(),
  role: Joi.string().valid('user', 'admin', 'editor'),
  avatar:Joi.string().uri().allow('', null).optional(),
  status: Joi.string().valid('active', 'inactive', 'suspended'),
  phone: Joi.string().pattern(/^1[3456789]\d{9}$/).allow('', null).optional(),
  // 允许部分更新，profile字段可选
  profile: Joi.object({
    avatar: Joi.string().uri(),
    bio: Joi.string().max(200)
  })
}).min(1); // 至少更新一个字段

// 密码重置验证
export const resetPasswordSchema = Joi.object({
  newPassword: Joi.string().min(8).required()
    .pattern(new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])'))
    .message('密码必须包含大小写字母和数字'),
  confirmPassword: Joi.string().valid(Joi.ref('newPassword')).required()
    .messages({ 'any.only': '两次输入密码不匹配' })
});

export { userIdSchema };